package com.thinkgem.jeesite.test;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.examples.HtmlToPlainText;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

public class JsoupDemo {
private final static String BAIDUURL="http://www.baidu.com";
	
	/**
	 * 	jsoup
	 *	├── examples #样例，包括一个将html转为纯文本和一个抽取所有链接地址的例子。    
	 *	├── helper #一些工具类，包括读取数据、处理连接以及字符串转换的工具
	 *	├── nodes #DOM节点定义
	 *	├── parser #解析html并转换为DOM树
	 *	├── safety #安全相关，包括白名单及html过滤
	 *	└── select #选择器，支持CSS Selector以及NodeVisitor格式的遍历
	 * @throws IOException 
	 */
	//select #选择器，支持CSS Selector以及NodeVisitor格式的遍历
	@Test
	public void test1() throws IOException{
		
		Validate.isTrue(BAIDUURL.length()>10, "usage: supply url to fetch");
		
		// 下载url并解析成html DOM结构
	    Document doc = Jsoup.connect(BAIDUURL).get();
	    // 使用select方法选择元素，参数是CSS Selector表达式
	    Elements links = doc.select("link[href]");
	    System.out.println("链接数："+links.size());
	    
	    for (Element link : links) {
	        //使用abs:前缀取绝对url地址
	    	System.out.println("href："+link.attr("abs:href"));
	    	System.out.println("name："+link.text());
	    }
	}
	
	/**
	 *  Node类是一个抽象类，它代表DOM树中的一个节点，它包含：
	 *	父节点parentNode以及子节点childNodes的引用
	 *	属性值集合attributes
	 *	页面的uribaseUri，用于修正相对地址为绝对地址
	 *	在兄弟节点中的位置siblingIndex，用于进行DOM操作
	 * @throws IOException
	 */
	//纯文本
	//@Test
	public void test2() throws IOException{
		// fetch the specified URL and parse to a HTML DOM
	    Document doc = Jsoup.connect(BAIDUURL).get();
	    //HTML
	    System.out.println(doc.toString());
	    HtmlToPlainText formatter = new HtmlToPlainText();
	    String plainText = formatter.getPlainText(doc);
	    //TEXT
	    System.out.println(plainText);
	}
	
	@Test
	public void testHtml(){
		String html="<a href=/root/EformAction.do?actionType=open&nid=452881 target=_blank>挂起数量</a>";
		Document doc = Jsoup.parse(html);
		Elements a = doc.select("a[href]");
		System.out.println("href："+a.attr("href"));
    	System.out.println("name："+a.text());
    	System.out.println("target："+a.attr("target"));
	}
}
